package com.gitee.wsl.jvm.eventbus

import java.io.IOException
import java.util.Date
import java.util.concurrent.CompletableFuture


interface MessageQueueHandler {
    /**
     * 订阅主题
     *
     * @param topic           主题
     * @param consumer        消费者（实例 ip 或 集群 name）
     * @param consumerHandler 消费处理
     */
    @Throws(IOException::class)
    fun <V> subscribe(topic: String, consumer: String, consumerHandler: (V)->Unit)

    /**
     * 取消订阅主题
     *
     * @param topic    主题
     * @param consumer 消费者（实例 ip 或 集群 name）
     */
    @Throws(IOException::class)
    fun unsubscribe(topic: String, consumer: String)

    /**
     * 发布消息
     *
     * @param topic     主题
     * @param content   消息内容
     * @param scheduled 预定派发时间
     * @param qos       质量等级（0 或 1）
     */
    @Throws(IOException::class)
    fun publish(topic: String, content: String, scheduled: Date?=null, qos: Int=1): CompletableFuture<*>

}

interface MessageQueueManager{
    /**
     * 连接
     */
    @Throws(IOException::class)
    fun connect(auto: Boolean=false): MessageQueueHandler

    /**
     * 断开连接
     */
    @Throws(IOException::class)
    fun disconnect()

    /**
     * 客户端配置
     */
    //fun config(configHandler: ClientConfigHandler?): MessageQueueHandler

    /**
     * 自动回执
     */
    //fun autoAcknowledge(auto: Boolean): MessageQueueHandler
}